import sys
import os
import json
import urllib.request
from pprint import pprint
import datetime
from datetime import timedelta
import mysql.connector
import csv
import codecs

import MyLogger
import MyLib

#Déclaration
arguments = dict() #dict
i = 0 #Int
config_json = {} #Json
statusSupervision = "OK"

#Procedure chargement du fichier config JSON
def charger_config() :
    global config_json
    try:
        MyLogger.logger.debug("Début chargement configuration")
        config=codecs.open(arguments["jsonFile"], 'r','utf-8')
        config_json = json.load(config)
        MyLogger.logger.debug("Chargement configuration réussi")
    except ValueError as exc:
        MyLogger.logger.error("Erreur pendant le chargement du fichier de configuration : " + arguments["param"])
        sys.exit("Erreur")

#Procedure Mise à jour
def updateAll() :
    global config_json, statusSupervision
    try:
        MyLogger.logger.debug("Début UpdateAll")

        #supervision
        if(config_json["config_db"]["host"] != "null"):
            cnx = mysql.connector.connect(user=config_json["config_db"]["db"], database=config_json["config_db"]["db"], password=config_json["config_db"]["mdp"], host=config_json["config_db"]["host"])
            cur = cnx.cursor(buffered=True)

            sql = "INSERT INTO `tab_log` (`id` ,`dateTime` ,`type` ,`commentaires`) VALUES (NULL ,  NOW(),  1,  '[INFO][Etape:start]UpdateAll');"
            try:
                cur.execute(sql)
                cnx.commit()
            except mysql.connector.Error as err:
                MyLogger.logger.error("Erreur : "+format(err))
                MyLogger.logger.debug("SQL : "+sql)
        
        MyLogger.logger.debug("tortoise path:"+config_json["config_tortoise"]["path"])

        for objs in config_json["config_svn"]:
            MyLogger.logger.debug("name:"+objs["name"]+" ,path:"+objs["path"]+" ,rev:"+objs["rev"])
            strRev = ""
            if(objs["rev"] is not "") :
                strRev = "/rev:"+objs["rev"]+" "
            strCmd = ""
            strCmd = config_json["config_tortoise"]["path"]+"TortoiseProc.exe /command:update /path:\""+objs["path"]+"\" "+strRev+"/closeonend:1"
            MyLogger.logger.debug("cmd:"+strCmd)
            try:
                os.system(strCmd)
            except Exception as e:
                statusSupervision = "WARNING"
                MyLogger.logger.error("Erreur pendant update du "+objs["name"]+" : ("+format(e)+")")

        MyLogger.logger.debug("Fin UpdateAll")
        
        #supervision
        if(config_json["config_db"]["host"] != "null"):
            sql = "INSERT INTO `tab_log` (`id` ,`dateTime` ,`type` ,`commentaires`) VALUES (NULL ,  NOW(),  1,  '[INFO][Etape:fin][Statut:"+statusSupervision+"]UpdateAll');"
            try:
                cur.execute(sql)
                cnx.commit()
            except mysql.connector.Error as err:
                MyLogger.logger.error("Erreur : "+format(err))
                MyLogger.logger.debug("SQL : "+sql)

            cnx.close()
        
    except Exception as e:
        MyLogger.logger.error("Erreur pendant updateAll : ("+format(e)+")")
        #supervision
        if(config_json["config_db"]["host"] != "null"):
            sql = "INSERT INTO `tab_log` (`id` ,`dateTime` ,`type` ,`commentaires`) VALUES (NULL ,  NOW(),  1,  '[INFO][Etape:fin][Statut:KO]Erreur pendant updateAll : ("+format(e)+")');"
            try:
                cur.execute(sql)
                cnx.commit()
            except mysql.connector.Error as err:
                MyLogger.logger.error("Erreur : "+format(err))
                MyLogger.logger.debug("SQL : "+sql)
            cnx.close()
            sys.exit("Erreur")
        

#Procedure Say More
def more() :
    MyLogger.logger.info("Les options disponible sont : 'updateAll'.")
    MyLogger.logger.info("Exemple de syntax pour 'updateAll' : 'python script_svn_update.py exemple.config.svn_update.json updateAll'.")
    MyLogger.logger.info("Exemple de syntax pour 'more' : 'python script_svn_update.py more'.")
    

#Message de bienvenu.
MyLogger.logger.info ("Bienvenue dans le script pour la mise à jour des produits ODA.")

#Récupération des arguments.
for x in sys.argv :
    i += 1
    if i == 2 :
        arguments["jsonFile"] = x
    elif i == 3 :
        arguments["action"] = x
        if x not in ["updateAll","update"] :
            MyLogger.logger.warning("Votre premier argument ("+x+") est incorrect, seul 'importer' sont aurorisés.")
            sys.exit("Erreur")
        else :
            MyLogger.logger.info("Mode d'action choisi : "+x+".")
            arguments["action"] = x
            
    if len(arguments) == 0 :
        arguments["action"] = "more"

#Affichage        
if arguments["action"] == "updateAll" :
    charger_config()
    updateAll()
elif arguments["action"] == "more" :
    more()

#Message de fin.
MyLogger.logger.info ("Fin du script.")
sys.exit(0)

    
